package cn.itsource.staticdemo;

/**
 *  static：
 *  		1. 概念：是修饰符，表示静态的，修饰类和成员变量、方法的
 *  		2. 
 *  			能修饰：
 *  				成员变量
 *  				普通方法
 *  				内部类
 *  				
 *  			不能修饰：
 *  				构造方法
 *  				外部类
 *  
 *  		特点：
 *  			static修饰的成员（成员变量、普通方法、内部类）在类被加载的时候，就加载到静态区
 *  			会被，所有以该类创建的对象共享，只有一份，永远以最后一次修改的结果为主
 *  
 *  			程序执行流程：
 *  				当需要用到一个类的时候（new 类()），程序会去加载该类的字节码文件。这个时候，程序会先判断当前字节码文件中是否有static修饰的成员
，					如果有则会先将该static修饰的成员加载到静态区，分配一个地址，然后再加载字节码文件，加载字节码文件的时候会持有该静态成员的地址。
 *  
 *  		3. 使用场景：
 *  			1. 需要被所有对象共享一些数据的时候
 *  			2. 不想被多次创建对象的时候，因为每次创建对象都会消耗资源
 *  			3. 单例模式（第四天讲）
 *  			4. 一般情况下，跟public static final连用，这是全局常量，命名方式：
 *  				如，USER_NAME,一般用了做一些固定不变的值，例如：π：Math.PI
 *  
 *  			5. 修饰方法就只是为了方便调用
 *  		
 *  		4. 最近几天不能使用static修饰成员变量
 *  			
 */
public class Student {
	/**测试static修饰成员变量使用*/
	static String name;
	int age;
	
	public Student(String n){
		name = n;//给成员变量name赋值为n
	}
	
	public static void testStaticMethod() {
		System.out.println("测试static修饰普通方法");
	}
	
	public void testMethod() {
		System.out.println("测试没static修饰普通方法");
	}
	
	/**
	 * 内部类，就简单的认为是一个成员变量即可
	 */
	class Inner1{
		
	}
	
	/**
	 * 静态内部类，就简单的认为是一个成员变量即可
	 */
	static class Inner2{
		
	}
}
